home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 26 / Cream of the Crop 26.iso / os2 / octa209s.zip / octave-2.09 / libs / info / pc.c < prev    next >
C/C++ Source or Header  |  1993-07-13  |  2KB  |  99 lines

  1. /* pc.c - terminal I/O calls for GNU info for OS/2
  2.    and other PC support functions
  3.    Kai Uwe Rommel, 1990-1993
  4.  */
  5.  
  6. #include <stdio.h>
  7. #include <stdlib.h>
  8.  
  9. #include <io.h>
  10. #include <fcntl.h>
  11. #include <string.h>
  12.  
  13. #define INCL_VIO
  14. #include <os2emx.h>
  15. #include <sys/kbdscan.h>
  16.  
  17. #include "pc.h"
  18.  
  19. static VIOCURSORINFO vci;
  20.  
  21. void pc_init (void)
  22. {
  23.   static VIOCURSORINFO vcin;
  24.  
  25.   if (_osmode == OS2_MODE)
  26.     {
  27.       VioGetCurType(&vci, 0);
  28.       vcin = vci;
  29.       vcin.yStart = 0;
  30.       vcin.cEnd = -100;
  31.       VioSetCurType(&vcin, 0);
  32.     }
  33. }
  34.  
  35. void pc_exit (void)
  36. {
  37.   if (_osmode == OS2_MODE)
  38.     VioSetCurType(&vci, 0);
  39. }
  40.  
  41. int pc_getc (int wait)
  42. {
  43.   int c;
  44.   static int next;
  45.  
  46.   if (next)
  47.     return c = next, next = 0, c;
  48.  
  49.   if ((c = _read_kbd (0, wait, 0)) == -1)
  50.     return -1;
  51.  
  52.   if (c == 26)
  53.     return next = 'V', 27;
  54.   if (c != 0x00 && c != 0xE0)
  55.     return c;
  56.  
  57.   if ((c = _read_kbd (0, wait, 0)) == -1)
  58.     return -1;
  59.  
  60.   switch (c)
  61.   {
  62.   case K_F1:
  63.     return 'H' - 64;
  64.  
  65.   case K_HOME:
  66.     return 'A' - 64;
  67.   case K_END:
  68.     return 'E' - 64;
  69.  
  70.   case K_CTRL_HOME:
  71.     return next = '<', 27;
  72.   case K_CTRL_END:
  73.     return next = '>', 27;
  74.  
  75.   case K_RIGHT:
  76.     return 'F' - 64;
  77.   case K_LEFT:
  78.     return 'B' - 64;
  79.   case K_DOWN:
  80.     return 'N' - 64;
  81.   case K_UP:
  82.     return 'P' - 64;
  83.  
  84.   case K_CTRL_LEFT:
  85.     return next = 'B', 27;
  86.   case K_CTRL_RIGHT:
  87.     return next = 'F', 27;
  88.  
  89.   case K_DEL:
  90.   case K_PAGEUP:
  91.     return next = 'V', 27;
  92.   case K_PAGEDOWN:
  93.     return 'V' - 64;
  94.  
  95.   default:
  96.     return ' ';
  97.   }
  98. }
  99.